package jp.co.apl.haven;

import static jp.co.apl.haven.util.HavenProtosUtil.*;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

import jp.co.apl.haven.generated.HavenProtos.BasicInfoItem;
import jp.co.apl.haven.generated.HavenProtos.Category;
import jp.co.apl.haven.generated.HavenProtos.Enquete;

import com.google.common.collect.Lists;

public class GenerateQuestionData {

    public static void main(String[] args) throws FileNotFoundException,
            IOException {
        System.out.println("Generate Data start");

        Enquete
            .newBuilder()
            .setVersion(1)
            .addAllCategory(categories())
            .addAllBasicInfoItem(basicInfo())
            .build()
            .writeTo(new FileOutputStream(args[0]));

        System.out.println("Generate Data end");
    }

    private static List<Category> categories() {
        final Category c1 =
            Category
                .newBuilder()
                .setId(1)
                .setTitle("全体の状況")
                .addAllQuestion(
                    qlist(
                        q(
                            1,
                            "施設の種類",
                            "あなたが今生活している施設は、次のうちどれですか？",
                            sel("校舎・体育館・公民館等集会場"),
                            sel("医療機関"),
                            sel("介護福祉施設"),
                            sel("寺社・寺"),
                            sel("その他")),
                        q(
                            2,
                            "現在の避難者数（昼間）",
                            "あなたが今生活している施設には、昼間には何名くらいの避難者がいますか？",
                            "名"),
                        q(
                            3,
                            "現在の避難者数（夜間）",
                            "あなたが今生活している施設には、夜間には何名くらいの避難者がいますか？",
                            "名"),
                        q(
                            4,
                            "居住空間（１人あたり）",
                            "居住空間の広さはどのくらいですか？",
                            sel("２畳未満"),
                            sel("２畳以上４畳未満"),
                            sel("４畳以上")),
                        q(
                            5,
                            "ライフライン（トイレ）",
                            "あなたが今生活している施設にはトイレがありますか？",
                            sel(
                                "ある",
                                cq(
                                    5001,
                                    "ライフライン（トイレ）",
                                    "トイレは仮設ですか？",
                                    sel("はい"),
                                    sel("いいえ"))),
                            sel("ない")),
                        q(
                            6,
                            "パソコン",
                            "パソコンはありますか？",
                            sel(
                                "ある",
                                cq(6001, "パソコン（台数）", "パソコンは何台ありますか？", "台"),
                                cq(
                                    6002,
                                    "パソコン（ネット接続可能台数）",
                                    "インターネット接続のできるパソコンは何台ありますか？",
                                    "台")),
                            sel("ない"))

                    ))
                .build();

        final Category c2 =
            Category
                .newBuilder()
                .setId(2)
                .setTitle("衛生管理")
                .addAllQuestion(
                    qlist(
                        q(
                            7,
                            "飲料水の確保",
                            "飲料水はどうのように入手していますか？",
                            sel("水道"),
                            sel("井戸水"),
                            sel("給水車")),
                        q(
                            8,
                            "ゴミの集積（分別）",
                            "ゴミは適切に分別されていますか？",
                            sel("はい"),
                            sel("いいえ")),
                        q(
                            9,
                            "ゴミの集積（衛生状態）",
                            "ゴミの衛生状態は適切ですか？",
                            sel("はい"),
                            sel("いいえ")),
                        q(
                            10,
                            "ゴミの集積（回収）",
                            "ゴミは回収されていますか？",
                            sel(
                                "はい",
                                cq(
                                    10001,
                                    "ゴミの集積（回収頻度）",
                                    "ゴミの回収頻度は次のうちどの程度ですか？",
                                    sel("週２回以上"),
                                    sel("週１回"),
                                    sel("月２回以上"),
                                    sel("月１回以下"))),
                            sel(
                                "いいえ",
                                cq(
                                    10002,
                                    "ゴミの集積（処理方法）",
                                    "ゴミはどのように処理されていますか？",
                                    sel("焼却"),
                                    sel("埋設")))),
                        q(11, "浴場（有無）", "浴場はありますか？", sel("ある"), sel("ない")),
                        q(
                            12,
                            "浴場（衛生状態）",
                            "浴場の衛生状態は適切ですか？",
                            sel("はい"),
                            sel("いいえ")),
                        q(
                            13,
                            "浴場（浴場水の衛生状態）",
                            "浴場水の衛生状態は適切ですか？",
                            sel("はい"),
                            sel("いいえ")),
                        q(
                            14,
                            "喫煙",
                            "喫煙についてのルールは、次のうちどれですか？",
                            sel("敷地内禁煙"),
                            sel("屋内禁煙"),
                            sel("屋内喫煙所"),
                            sel("ルールなし"))

                    ))
                .build();

        final Category c3 =
            Category
                .newBuilder()
                .setId(3)
                .setTitle("テスト用")
                .addAllQuestion(
                    qlist(q(
                        15,
                        "テスト質問",
                        "テスト質問本文",
                        sel(
                            "1",
                            cq(15001, "1", "1", sel("1-1"), sel("1-2")),
                            cq(15002, "2", "2", sel("2-1"), sel("2-2")),
                            cq(15003, "3", "3", sel("3-1"), sel("3-2"))))

                    ))
                .build();

        return Lists.newArrayList(c1, c2, c3);
    }

    private static Iterable<? extends BasicInfoItem> basicInfo() {
        return Lists.newArrayList(
            b1(
                1,
                "代表者種別1",
                bsel("自治体職員", "自治体職員"),
                bsel("住民", "住民"),
                bsel("ボランティア", "ボランティア")),
            b1(
                2,
                "代表者種別2",
                bsel("自治体職員", "自治体職員"),
                bsel("住民", "住民"),
                bsel("ボランティア", "ボランティア")),
            b1(
                3,
                "代表者種別3",
                bsel("自治体職員", "自治体職員"),
                bsel("住民", "住民"),
                bsel("ボランティア", "ボランティア")),
            b2(4, "避難所名1"),
            b2(5, "避難所名2"),
            b2(6, "避難所名3"));
    }

}
